package com.sisgesbyte.services.sistema;

import java.util.ArrayList;
import java.util.List;

import javax.ejb.EJB;
import javax.ejb.Stateless;
import javax.inject.Inject;

import com.sisgesbyte.common.ConstantesInternasSistema;
import com.sisgesbyte.common.Validaciones;
import com.sisgesbyte.dao.tecnico.MenuSistemaDao;
import com.sisgesbyte.data.entity.tecnico.MenuOpcionesEntity;
import com.sisgesbyte.data.entity.tecnico.ModulosEntity;
import com.sisgesbyte.services.sistema.bean.ListaMenuOpcionesResponse;
import com.sisgesbyte.services.sistema.bean.ListaModuloResponse;
import com.sisgesbyte.services.sistema.bean.MenuOpcionesBean;
import com.sisgesbyte.services.sistema.bean.ModuloBean;

@Stateless
public class MenuSistemaImpl implements MenuSistema {

	@EJB
	private MenuSistemaDao menuSistemaDao;

	@Inject
	private Validaciones validaciones;
	
	@Override
	public ListaModuloResponse listarMenuSistema(String idTransaccion,
			int codRol) {

		List<ModulosEntity> listaMenu = null;
		ListaModuloResponse response = new ListaModuloResponse();
		List<ModuloBean> listaMenuBean = new ArrayList<ModuloBean>();
		try {
			listaMenu = menuSistemaDao.mostrarMenu(codRol);

		} catch (Exception e) {
			System.out
					.println("Ocurrio un Error al cargar el Menu del sistema : "
							+ e.getMessage());
			response.setCodigoRespuesta(ConstantesInternasSistema.MOSTRAR_MENU_COD_IDT7);
			response.setMensajeRespuesta(ConstantesInternasSistema.MOSTRAR_MENU_MSJ_IDT7);
		}

		if (listaMenu.size() > 0) {

			for (ModulosEntity row : listaMenu) {
				ModuloBean menu = new ModuloBean();
				menu.setCodigo(row.getId());
				menu.setDescripcion(validaciones.validarCamposString(row.getDescripcion()));
				menu.setImagen(validaciones.validarCamposString(row.getIcon()));
				menu.setNombre(validaciones.validarCamposString(row.getNombre()));
				menu.setOrden(row.getOrden());
				menu.setSummary(validaciones.validarCamposString(row.getSummary()));
				menu.setTipo(row.getTipo());
				menu.setUrl(validaciones.validarCamposString(row.getUrl()));
				menu.setVersion(validaciones.validarCamposString(row.getVersion()));
				listaMenuBean.add(menu);
			}
			response.setMenu(listaMenuBean);
			response.setIdTransaccion(idTransaccion);
			response.setCodigoRespuesta(ConstantesInternasSistema.CODIGO_EXITO);
			response.setMensajeRespuesta(ConstantesInternasSistema.MENSAJE_EXITO);

		} else {
			response.setIdTransaccion(idTransaccion);
			response.setCodigoRespuesta(ConstantesInternasSistema.MOSTRAR_MENU_COD_IDF7);
			response.setMensajeRespuesta(ConstantesInternasSistema.MOSTRAR_MENU_MSJ_IDF7);
		}

		return response;
	}

	@Override
	public ListaMenuOpcionesResponse listarMenuOpciones(String idTransaccion,int codRol,int codModulo) {

		List<MenuOpcionesEntity> menuOpciones = null;
		ListaMenuOpcionesResponse response = new ListaMenuOpcionesResponse();
		try {
			response.setCodigoRespuesta(idTransaccion);
			try {
				menuOpciones = menuSistemaDao.mostrarMenuOpciones(codRol,codModulo);
			} catch (Exception e) {
				System.out.println("Error al obtener lista de Menu : mostrarMenuOpciones");
				response.setCodigoRespuesta(ConstantesInternasSistema.MOSTRAR_MENUOPCIONES_COD_IDT8);
				response.setMensajeRespuesta(ConstantesInternasSistema.MOSTRAR_MENUOPCIONES_MSJ_IDT8);
			}
			
			if (menuOpciones.size() > 0) {
				List<MenuOpcionesBean> lsMenu = new ArrayList<MenuOpcionesBean>();
				for (MenuOpcionesEntity row : menuOpciones) {
					MenuOpcionesBean menu = new MenuOpcionesBean();
					menu.setCodMenu(row.getId());
					menu.setCodModulo(row.getModulo_id());
					menu.setIcono(validaciones.validarCamposString(row.getIcon()));
					menu.setNombre(validaciones.validarCamposString(row.getNombre()));
					menu.setOrden(row.getOrden());
					menu.setParentId(row.getParent_id());
					menu.setUrl(validaciones.validarCamposString(row.getUrl()));
					lsMenu.add(menu);
				}
				response.setMenuOpciones(lsMenu);
				response.setCodigoRespuesta(ConstantesInternasSistema.CODIGO_EXITO);
				response.setMensajeRespuesta(ConstantesInternasSistema.MENSAJE_EXITO);
			}else{
				response.setCodigoRespuesta(ConstantesInternasSistema.MOSTRAR_MENUOPCIONES_COD_IDF8);
				response.setMensajeRespuesta(ConstantesInternasSistema.MOSTRAR_MENUOPCIONES_MSJ_IDF8);
			}

		} catch (Exception e) {
			System.out.println("Ocurrio un error en el proceso : listarMenuOpciones");
			response.setCodigoRespuesta(ConstantesInternasSistema.MOSTRAR_MENUOPCIONES_COD_IDT8);
			response.setMensajeRespuesta(ConstantesInternasSistema.MOSTRAR_MENUOPCIONES_MSJ_IDT8);
		}
		return response;
	}

}
